/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.genew.squadra.xml.model.wellformed;

import com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

/**
 *
 * @author Mario
 */
public class XMLTest {
    
    
    public static Document loadDocument(String path, String name) throws MySaxException{
         MyErrorHandler h = new MyErrorHandler();
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//creiamo la factory
        dbf.setNamespaceAware(false);//disabilitiamo la conoscienza dei namespace
        dbf.setValidating(false);//prende la dtd associata e vede se è valida// se siamo sicure della provenienza del documento
        //tipo che il documento è stato generato non manipolato non validatelo mai perchè validare posrta via tempo
        try {
            //vuol dire attivare la validazione per dtd quindi se usi gli schemi o altro va messo a FALSE
            DocumentBuilder db = dbf.newDocumentBuilder();//è il benedetto parser con le caratteristiche che vogliamo
            db.setErrorHandler(h);
            return db.parse(new File(path));
        } catch (ParserConfigurationException ex) {
            System.out.println("impossibile creare il parser xml richiesto");
        }  //possiamo smettere di gestire la sax exception da qui.../la stampa l'ha fatta l'error handler
         
      catch (SAXParseException ex){ System.out.println("partita l'altra eccezione");
   	 MySaxException my = new MySaxException(name,ex.getSystemId(),ex.getLineNumber(),ex.getColumnNumber(),ex.getMessage());
   	 throw my;}
        catch (SAXException ex){       	
        	 System.out.println("warning sul sax parser");}
         catch (IOException ex) {
            System.out.println("errore I/O");
        }
        //carichiamo il documento
        return null;
    }

//	public static void loadDocument(CommonsMultipartFile commonsMultipartFile) {
//		MyErrorHandler h = new MyErrorHandler();
//        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//creiamo la factory
//        dbf.setNamespaceAware(false);//disabilitiamo la conoscienza dei namespace
//        dbf.setValidating(false);//prende la dtd associata e vede se è valida// se siamo sicure della provenienza del documento
//        //tipo che il documento è stato generato non manipolato non validatelo mai perchè validare posrta via tempo
//        try {
//            //vuol dire attivare la validazione per dtd quindi se usi gli schemi o altro va messo a FALSE
//            DocumentBuilder db = dbf.newDocumentBuilder();//è il benedetto parser con le caratteristiche che vogliamo
//            db.setErrorHandler(h);
//           
//            return db.parse();
//        } catch (ParserConfigurationException ex) {
//            System.out.println("impossibile creare il parser xml richiesto");
//        } catch (SAXException ex) {//eeccezione che viene fuori col parser
//            //possiamo smettere di gestire la sax exception da qui.../la stampa l'ha fatta l'error handler
//        } catch (IOException ex) {
//            System.out.println("errore I/O");
//        }
//        //carichiamo il documento
//        return null;
//		
//	}
//  
    
}
